

package com.dog.basics.service.sys;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dog.basics.bean.dto.admin.sys.*;
import com.dog.basics.bean.model.sys.SysUser;
import com.dog.basics.bean.vo.admin.sys.AdminUserInfoVo;
import com.dog.basics.bean.vo.admin.sys.AdminUserVo;
import com.dog.basics.bean.vo.admin.sys.AdminUserXqVo;
import com.dog.basics.bean.vo.admin.sys.SysUserPageVo;
import com.dog.basics.common.util.PageParam;

import java.util.List;

/**
 * @author guonh
 * @date 2017/10/31
 */
public interface SysUserService extends IService<SysUser> {

    /**
     * 根据用户id获取用户信息
     *
     * @param userName
     * @return
     */
    SysUserPageVo getSysUserByUserName(String userName);

    /**
     * 查询用户信息
     *
     * @param id 用户
     * @return userInfo
     */
    AdminUserVo findUserInfo(Long id);

    /**
     * 分页查询用户信息（含有角色信息）
     *
     * @param page 分页对象
     * @param obj  参数列表
     * @return
     */
    IPage<AdminUserInfoVo> getUsersWithRolePage(PageParam page, AdminSysUserFromDto obj);

    IPage<AdminUserInfoVo> getUsersWithRoleCodePage(PageParam page, AdminSysUserFromDto obj);

    /**
     * 删除用户
     *
     * @param user 用户
     * @return boolean
     */
    Boolean deleteUserById(SysUser user);

    /**
     * 更新当前用户基本信息
     *
     * @param obj 用户信息
     * @return Boolean
     */
    Boolean updateUserInfo(AdminSysUserEditInfoDto obj,SysUser user);

    /**
     * 更新指定用户信息
     *
     * @param obj 用户信息
     * @return
     */
    Boolean updateUser(AdminSysUserEditDto obj);

    /**
     * 通过ID查询用户信息
     *
     * @param id 用户ID
     * @return 用户信息
     */
    AdminUserInfoVo selectUserVoById(Long id);
    /**
     * 查询个人详细信息
     *
     * @param id 用户ID
     * @return 用户信息
     */
    AdminUserXqVo getObjXq(Long id);

    /**
     * 查询上级部门的用户信息
     *
     * @param username 用户名
     * @return R
     */
    List<AdminUserInfoVo> listAncestorUsers(String username);

    /**
     * 保存用户信息
     *
     * @param obj DTO 对象
     * @return success/fail
     */
    Boolean saveUser(AdminSysUserAddDto obj);

    /**
     * @Description: 冻结用户
     * @Param: Boolean
     * @return: Boolean
     * @Author: wph
     * @Date: 2020/4/9  0027
     */
    Boolean nouse(Long id);
    /**
     * @Description: 是否强制用户修改密码
     * @Param: Boolean
     * @return: Boolean
     * @Author: wph
     * @Date: 2020/4/9  0027
     */
    Boolean sfPassword(Long id);
    /**
     * 重置密码
     *
     * @param obj
     * @return guonh 2020年2月10日
     */
    Boolean editResetPassword(AdminSysUserResetDto obj);

}
